/**
 * 示例使用脚本
 * 演示如何使用PLC通信应用
 */
const PLCCommunicationApp = require('./src/app');
const logger = require('./src/utils/logger');

// 创建应用实例
const app = new PLCCommunicationApp();

// 主函数
async function main() {
  try {
    // 初始化应用
    await app.initialize();
    
    // 启动应用
    await app.start();
    
    // 等待系统稳定
    logger.info('系统启动中，等待连接稳定...');
    await new Promise(resolve => setTimeout(resolve, 5000));
    
    // 读取所有设备的所有标签
    logger.info('读取所有设备数据...');
    const siemensData = await app.readAllTags('siemens-s7-1200-1');
    logger.info(`西门子S7-1200数据: ${JSON.stringify(siemensData, null, 2)}`);
    
    const rockwellData = await app.readAllTags('rockwell-1769-1');
    logger.info(`罗克韦尔1769数据: ${JSON.stringify(rockwellData, null, 2)}`);
    
    // 发送控制命令示例
    logger.info('发送控制命令...');
    await app.sendCommand('siemens-s7-1200-1', 'Valve1Status', true);
    
    // 批量发送命令示例
    const batchCommands = [
      { tagName: 'Valve1Status', value: false },
      { tagName: 'Valve2Status', value: true }
    ];
    await app.sendBatchCommands('siemens-s7-1200-1', batchCommands);
    
    // 运行一段时间后停止
    logger.info('系统运行中，将在30秒后停止...');
    await new Promise(resolve => setTimeout(resolve, 30000));
    
    // 停止应用
    await app.stop();
    logger.info('应用已停止');
    
  } catch (error) {
    logger.error(`应用运行错误: ${error.message}`);
  }
}

// 运行主函数
main().catch(error => {
  logger.error(`主函数异常: ${error.message}`);
  process.exit(1);
});
